#ifndef _Paint_h
#define _Paint_h

#include "CxxUtils.h"
#include "LangUtils.h"

class DoOpPaint
{
public: 
	class ds_erasepage : public _DoOperator
	{
	protected: 
		ds_erasepage(const ds_erasepage &);
		ds_erasepage& operator=(const ds_erasepage &);
	public: 
		ds_erasepage() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_stroke : public _DoOperator
	{
	protected: 
		ds_stroke(const ds_stroke &);
		ds_stroke& operator=(const ds_stroke &);
	public: 
		ds_stroke() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_fill : public _DoOperator
	{
	protected: 
		ds_fill(const ds_fill &);
		ds_fill& operator=(const ds_fill &);
	public: 
		ds_fill() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_eofill : public _DoOperator
	{
	protected: 
		ds_eofill(const ds_eofill &);
		ds_eofill& operator=(const ds_eofill &);
	public: 
		ds_eofill() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_rectstroke : public _DoOperator
	{
	protected: 
		ds_rectstroke(const ds_rectstroke &);
		ds_rectstroke& operator=(const ds_rectstroke &);
	public: 
		ds_rectstroke() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_rectfill : public _DoOperator
	{
	protected: 
		ds_rectfill(const ds_rectfill &);
		ds_rectfill& operator=(const ds_rectfill &);
	public: 
		ds_rectfill() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_ustroke : public _DoOperator
	{
	protected: 
		ds_ustroke(const ds_ustroke &);
		ds_ustroke& operator=(const ds_ustroke &);
	public: 
		ds_ustroke() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_ufill : public _DoOperator
	{
	protected: 
		ds_ufill(const ds_ufill &);
		ds_ufill& operator=(const ds_ufill &);
	public: 
		ds_ufill() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_ueofill : public _DoOperator
	{
	protected: 
		ds_ueofill(const ds_ueofill &);
		ds_ueofill& operator=(const ds_ueofill &);
	public: 
		ds_ueofill() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_shfill : public _DoOperator
	{
	protected: 
		ds_shfill(const ds_shfill &);
		ds_shfill& operator=(const ds_shfill &);
	public: 
		ds_shfill() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_image : public _DoOperator
	{
	protected: 
		ds_image(const ds_image &);
		ds_image& operator=(const ds_image &);
	public: 
		ds_image() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_colorimage : public _DoOperator
	{
	protected: 
		ds_colorimage(const ds_colorimage &);
		ds_colorimage& operator=(const ds_colorimage &);
	public: 
		ds_colorimage() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	class ds_imagemask : public _DoOperator
	{
	protected: 
		ds_imagemask(const ds_imagemask &);
		ds_imagemask& operator=(const ds_imagemask &);
	public: 
		ds_imagemask() : _DoOperator() {
		}

		virtual void execute(DevilSemantic &semantic);
	};

	static void push(_DoDictionaryMultimap& dict) {
		dict.put(CRefPtr< _DoObject >(new DoName("erasepage")), CRefPtr< _DoObject >(new ds_erasepage()));
		dict.put(CRefPtr< _DoObject >(new DoName("stroke")), CRefPtr< _DoObject >(new ds_stroke()));
		dict.put(CRefPtr< _DoObject >(new DoName("fill")), CRefPtr< _DoObject >(new ds_fill()));
		dict.put(CRefPtr< _DoObject >(new DoName("eofill")), CRefPtr< _DoObject >(new ds_eofill()));
		dict.put(CRefPtr< _DoObject >(new DoName("rectstroke")), CRefPtr< _DoObject >(new ds_rectstroke()));
		dict.put(CRefPtr< _DoObject >(new DoName("rectfill")), CRefPtr< _DoObject >(new ds_rectfill()));
		dict.put(CRefPtr< _DoObject >(new DoName("ustroke")), CRefPtr< _DoObject >(new ds_ustroke()));
		dict.put(CRefPtr< _DoObject >(new DoName("ufill")), CRefPtr< _DoObject >(new ds_ufill()));
		dict.put(CRefPtr< _DoObject >(new DoName("ueofill")), CRefPtr< _DoObject >(new ds_ueofill()));
		dict.put(CRefPtr< _DoObject >(new DoName("shfill")), CRefPtr< _DoObject >(new ds_shfill()));
		dict.put(CRefPtr< _DoObject >(new DoName("image")), CRefPtr< _DoObject >(new ds_image()));
		dict.put(CRefPtr< _DoObject >(new DoName("colorimage")), CRefPtr< _DoObject >(new ds_colorimage()));
		dict.put(CRefPtr< _DoObject >(new DoName("imagemask")), CRefPtr< _DoObject >(new ds_imagemask()));
	}
};

#endif
